home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
bbs
/
jdrexa10.zip
/
INST4OF4.DAT
/
BBS
/
HELP
/
TECHDOCS.DOC
< prev
Wrap
Text File
|
1994-12-18
|
98KB
|
1,940 lines
TECHNICAL NOTES
CONTENTS Topic
───────────────────────────────────────────────────────
INTRODUCTION
DESIGN NOTES
DATA STRUCTURES
Hear Ye! Hear Ye!
WORDSx.DAT
RESULTS
Actual records
DOOR STRUCTURES
Introduction
Door designers
For all line-based door formats
About the door appendices
JDRBBSxx.DEF
SFDOORS.DAT
DORINFOx.DEF
CHAIN.TXT
DOOR.SYS
PCBOARD.SYS version 14.x
PCBOARD.SYS version 12.x
CALLINFO.BBS
VISUAL CYBERSPACE BY 1995
JOHN ROHNER
APPENDIX B: Format of JDRBBSxx.DEF
Types
Log Leader
Exchange Rates
Max Door Minutes
Toggles
SL 255
Minute-Credits
Misc.
Fossil stuff
APPENDIX C: SFDOORS.DAT
APPENDIX D: DORINFOx.DEF
APPENDIX E: CHAIN.TXT
APPENDIX F: DOOR.SYS
APPENDIX G: PCBOARD.SYS version 14.x
APPENDIX H: PCBOARD.SYS version 12.x
APPENDIX I: CALLINFO.BBS
APPENDIX J: FidoNet
APPENDIX M: QWK stuff
APPENDIX N: Copyrights
INTRODUCTION This file contains the nitty-gritty technical details.
DESIGN NOTES The text body of a message is handled as a single long
string. Further, the message text is compressed before it is
stored.
The menu system is "promptless", it does not have a "Enter
menu selection:" line.
Ansi graphics support by both the user and sysop is required.
Color, though, is not. An extension of this: the caller must
have "auto wrap" or "auto line feed" (or whatever their
program calls it) to wrap text when it exceeds column 80--
since ANSI screens wrap around. You could change this by
ending each line of your ANSI's at column 79, but it is a lot
of unnecessary work. In the years I have been operating a
BBS, only two users have requested ASCII-only displays; a
user who was using a UNIX communications program, and a 1200
baud user I accidentally let on my BBS.
The commands, and most everything, is optimized towards
maximum probability. Example: 99% of the callers will not
be new users, so auto-name detection is used. This adds a
little hassle for the new (but rare) callers, and saves
hassle for the oft-calling callers. Another example:
uploading messages, it is more of a hassle than simply
answering a Y/N question--but then it is not a hassle for the
99% of message posters who will not be uploading a message.
Assumes the system operator will use a fossil driver.
Automatic byte/time exchange whenever possible and desirable.
At this level, major BBS program differences are design
differences. Examples: I do not use pop-up/pop-down windows,
I instead chose to make all my functions do-able remotely--
which means everything has be able to work at the other end.
Osiris uses many .EXE files, I prefer one big file. Maximus
uses text-edited definition files, I tried this once, but
found an internal configuration system to be better. Almost
all (maybe all) BBS programs rely on at least a front-end
mailer program to handle mail, I didn't--instead choosing to
put those capabilities into the program itself (it greatly
reduces the learning process for starting net mail).
DATA
STRUCTURES
Hear Ye! Let it be known that all data structures used with this BBS
Hear Ye! are now, and will forever be, in flux. They WILL be altered
from version to version at my whim.
WORDSx.DAT When expanded, these files contain words of the English
language.
Each file contains same-length words, except for WORDS0 and
WORDS9, which contain same-length fields, but the words are
packed with extra spaces (if less than 4 in WORDS0, or if
less than 18 in WORDS9). For instance, WORDS1.DAT contains
all 5 letter words.
That's when the file is unpacked. Currently it's packed,
using a scheme that allows each letter to use only 5 bits
rather than 8 bits.
RESULTS Len Strt-End Type Note
───────────────────────────────────────────────────────────────
2000 1-2000 100 * (1) Answers for 100 voting
questions.
102 2001-2102 51 * Integer Total users per state stats.
2103-2285 [Not Used]
15 2286-2300 15 Bytes Total bytes downloaded for
stats screen 7.
2301-2306 [Not Used]
4 2307-2310 Long integer Current position in
GOODBYE.TXT.
2311-2514 [Not used]
2515- (2) * (3) Data for Statistics screen 1.
(2) * (3) Data for Statistics screen 2.
(2) * (3) Data for Statistics screen 3.
(2) * (3) Data for Statistics screen 4.
(2) * (3) Data for Statistics screen 5.
(2) * (3) Data for Statistics screen 6.
(2) * (3) Data for Statistics screen 7.
(2) * (3) Data for Statistics screen 8.
(2) * (3) Data for Statistics screen 9.
(2) * (3) Data for Statistics screen z.
(2) * (3) Data for Statistics screen y.
(2) * (3) Data for Statistics screen x.
(5) * Long Data for Statistics screen w
(system totals).
(1) Integer Total number of users who voted on this
question.
9 * Integer Voting question answer totals--broken down
by answer selected (1 - 9).
(2) Settings.StatsSize, sysop configurable.
(3) String * 30 A user name.
Long An amount.
(4) Number of security level the sysop uses.
(5) 2 * (4) + 6
Actual Records
'
' UserRecord is the record structure of the USERS file. In the program the
' current users' information is stored in USER. in just such a record.
' Other user data is read in with the AnyUser. variable.
'
TYPE UserRecord 'Len = 384
UserName AS STRING * 30 'Mixed case.
Password AS STRING * 15 'Uppercase only.
CityState AS STRING * 30 'Mixed case
SysopNote AS LONG
UserNote AS LONG
BirthDate AS INTEGER 'Birthdate of user.
'Date stored in integer form.
SecLevel AS INTEGER '-32,767 to 32,767 security level.
FirstCall AS INTEGER 'First date user called.
'Date stored in integer form.
Attr AS INTEGER '16 bits: see useredit.ans
Toggles AS INTEGER '16 bits:
'1 True if should beep after transfers.
'2 True if show Enter Msg line numbers.
'3 True if show Read Msg total lines.
'4 True if should "turbo" out the msgs.
'5 True if user is a male.
'6 True if password assist is on.
'7 True if want to see L&D/Point values.
'rest are used. this needs updating.
Protocol AS STRING * 1 'User's procotol default.
Votes AS STRING * 100 '=100 Voting questions (Byte answers).
SubsStart AS INTEGER 'Subscription start date.
'Date stored in integer form.
Style AS STRING * 3
ElapsedMinsC AS INTEGER
ElapsedMins AS INTEGER 'elapsed non-DL/UL mins of calls today.
LastCallerNum AS LONG
LastDateOn AS INTEGER 'Last time user called.
'Date stored in integer form.
PswdChange AS STRING * 1 'Counter towards user change password order.
'0 = off, 1 to 255 ascii value.
AlterDate AS INTEGER 'The last date in which they exercised
'their Life & Death options.
'Date stored in integer form.
Toggles2 AS INTEGER '16 bits:
PRStuff AS STRING * 8 'Peer Review information.
Connect AS STRING * 1 'Last baud user connected at.
NewFilesPtr AS LONG '0 to 2,100,000,000
'What the "NewFilesPtr" number was at the last
'time they called, any stuff with
'numbers higher is new to them.
HighestPtr AS LONG '0 to 2,100,000,000 Highest HileFilePtr they
'know about. NewFilesPtr is call
'dependant--it's updated after they log out,
'this isn't--this is a security measure.
PagedSysop AS INTEGER '0 to 32,767 Number of times they've tried to
'page the sysop.
Logons AS INTEGER '0 to 32,767 Number of logons.
Attempts AS STRING * 1 '0 to 255 Number of bad password attempts
'since their last call.
MinCredits AS INTEGER '-32,767 to 32,767
'Number of minutes to add to their daily
'that their security level gets.
MinMegs AS INTEGER '-32,767 to 32,767
'This number is multiplied by 1 megabyte
'and then added to their "number of
'bytes can download" to determine what
'their download bytes limit is.
MsgsPosted AS INTEGER '0 to 32,767 Total number of public messages
'(excluding NetMail) they've posted.
EMsgsPosted AS INTEGER '0 to 32,767 Total number of private
'(excluding feedback and NetMail) messages
'they've posted.
FMsgsPosted AS INTEGER '0 to 32,767 Total number of feedback
'messages they've posted.
NetMailSent AS INTEGER '0 to 32,767 Total number of NetMail letters
'they've sent.
NetMailRcvd AS INTEGER '0 to 32,767 Total number of NetMail letters
'they've received.
Elapsed AS INTEGER '0 to 32,767 Length of previous call(s).
'Never exceeds maximum daily limit for
'whatever security level.
'Download minutes.
Dnlds AS INTEGER '0 to 32,767 Total files downloaded.
DLBytes AS LONG '0 to 2,100,000,000 Total bytes downloaded.
MinsDLing AS LONG '0 to 2,100,000,000 Total number of minutes
'downloading.
BadDLs AS INTEGER '0 to 32,767 Total number of bad DL's.
Uplds AS INTEGER '0 to 32,767 Total files uploaded.
ULBytes AS LONG '-'ve to 2,100,000,000 Total bytes uploaded.
MinsULing AS LONG '0 to 2,100,000,000 Total number of minutes
'uploading.
BadULs AS INTEGER '0 to 32,767 Total number of bad UL's.
Doors AS INTEGER '0 to 32,767 Number of accesses to doors.
SubsEnd AS INTEGER 'Date subscription ends.
HighNotePtr AS LONG
TotalMonies AS LONG 'total money they've sent.
LastMonies AS LONG 'last amount they sent
Attr2 AS INTEGER
BytesUToday AS LONG 'use date of last call to determine if current
'call means to zero this field.
BytesUWeek AS LONG 'this will have to be a weekly event.
'problem if user on another node when this
'executes.
MsgsRcvd AS INTEGER 'Number of normal messages TO: and read.
EMsgsRcvd AS INTEGER 'Number of private messages TO: and read.
SLSubsEnds AS INTEGER
ScreenSize AS STRING * 1
MsgRC AS STRING * 10 'ansi code for reading messages.
Language AS STRING * 1
RealName AS STRING * 30 'mixed case
HomePhone AS STRING * 17
BBSPhone AS STRING * 17
END TYPE
'
' MessageRecord is the record structure used for each messages header in
' the MESSAGES file. In the program, the message data is stored in the
' Message. variable with this same record.
'
TYPE MessageRecord 'Len = 136
Attr AS INTEGER '16 bits:
'1 True if a deleted message.
'2 True if Msg body is compressed.
'3 True if this is a reply.
'x True if NetMail
'x True if shouldn't ever NetMail out.
'5 True if shouldn't ever Auto delete.
'x True if should never delete at all.
'8 True if redirected from sysop.
'9 True if redirected from AI.
'10 True if redirected to sysop.
'11 True if redirected to AI.
'12 True if there are file attaches.
'13 True if message will be completed later.
'14 True if any file attaches are free.
'16 True if want's RR (temporary until NetMail)
'Rest are for the future.
MsgNum AS LONG '1 to 2,100,000,000 message number.
'Each message base has it's own message
'counter.
MsgFrom AS STRING * 30 'Name of sender. Mixed case.
MsgTo AS STRING * 30 'Name of receiver or "ALL". Mixed case.
MsgDateSent AS INTEGER 'Date message was sent.
'Date stored in integer form.
MsgTimeSent AS INTEGER 'Time stored in integer form.
'HHMM and +/-'ve depending on am/pm.
MsgDateRcvd AS INTEGER 'Date message was received. 0 if not
'received or sent to "ALL".
'Date stored in integer form.
MsgTimeRcvd AS INTEGER 'Time stored in integer form.
'HHMM and +/-'ve depending on am/pm.
NumOfBytes AS INTEGER 'Doesn't exceed 8192, message length.
NumberReplies AS STRING * 1 'This message has been replied to x times.
'This is not the number of active replies.
TimesRead AS INTEGER 'Number of times this message has been read.
LastDateRead AS INTEGER 'last date anybody read the message.
MsgSubject AS STRING * 33 'Compressed text--message subject.
MsgBase AS INTEGER '0 - 32,767 Message bases.
x AS INTEGER 'not used
Attr2 AS INTEGER 'not used, save for future attr2
SourceAddr AS STRING * 6 'NetMail source address.
DestAddr AS STRING * 6 'NetMail destination address.
MsgLoc AS LONG
END TYPE
'
' FileListRecord is the data stucture used in the FILELIST file. The data
' file containing the information for the various potential downloads.
'
TYPE FileListRecord 'Len = 128
RFArea AS INTEGER '0 to 32,767 File areas.
NewFilesPtr AS LONG 'The number each file is given, needs
'not be unique, but represents to the
'system and users when something is new.
'Similar in concept to just checking
'for new file dates since last call.
LDCount AS INTEGER 'Chr$(0-28), Chr$(100-199), A symbolic
'counter and guide about how long a file
'will be on-line (in days), also offers
'opportunity for users to "knock down" or
'"raise up" the "life" of the file.
'100-199 represents 00-99 file points value.
FName AS STRING * 12 'The file name. Including "."
'deliminator--left justified.
DescLoc AS LONG
DescSize AS INTEGER
GIFw AS INTEGER
GIFh AS INTEGER
GIFc AS INTEGER
future2 AS STRING * 39 '
FSize AS LONG 'The file's size.
UserName AS STRING * 30 'Mixed case. Name of uploader.
Percentage AS INTEGER 'Percentage rate to credit uploader.
Password AS INTEGER 'Two byte (checksum) password.
Downloaded AS INTEGER 'Number of times downloaded.
LastDLed AS INTEGER 'Last date it was downloaded.
DateULed AS INTEGER 'Date it was uploaded.
Attr AS INTEGER '16 bits:
'1 True if deleted.
'2 If free.
'3 If not validated yet.
'x If preferred compressed (BBS compressed).
'x If virus checked.
'6 If invisible.
'7 If incomplete.
'8 If a user created extract file.
'9 If free only if callers is 9600+ baud.
'x If downloading counts as an upload.
'rest for the future
Group AS INTEGER 'User must be in this group to access.
GFArea AS INTEGER '0 to 32,767 File areas.
RealDate AS INTEGER 'Files date on the disk.
Future AS STRING * 5
END TYPE
'
' FileNameInfo is the record for the FILES.IDX file.
'
TYPE FileNameInfo 'Len = 26
FName AS STRING * 12 'File name, including "." deliminator.
'Left justified.
FLoc AS LONG 'Location in FILELIST of this file's data.
FSize AS LONG 'Size of file in bytes.
Attr AS INTEGER '16 bits:
'1 True if deleted.
'2 If free.
'3 If not validated yet.
'x If preferred compressed (BBS compressed).
'x If virus checked.
'6 If invisible.
'7 If incomplete.
'8 If a user created extract file.
'x If downloading counts as an upload.
'rest for the future
RFArea AS INTEGER 'Real file area/location of file.
GFArea AS INTEGER 'Ghost file area/pretend.
END TYPE
TYPE LevelRecord 'Len = 28
SecLevel AS INTEGER
ShowLevel AS INTEGER
PCRatio AS INTEGER
BRatio AS INTEGER
FRatio AS INTEGER
DLMinsPerDay AS INTEGER
MinsPerCall AS INTEGER
MinsPerDay AS INTEGER
StartTime AS INTEGER
EndTime AS INTEGER
VoteWeight AS INTEGER
MinBaud AS LONG
MinPassLen AS INTEGER
END TYPE
TYPE SettingsRecord 'Len = 1043
AutoValAfDLx AS INTEGER
MaxLinesInMsg AS INTEGER 'Maximum lines allowed in a message.
MaxWidthOfMsg AS INTEGER 'Maximum chars per msg line.
NewsWidth AS INTEGER
MaxUsers AS INTEGER 'Maximum number of users to keep active.
MinPKTSqSize AS LONG
LDDelSL AS INTEGER
ExchBytes AS LONG
ExchMins AS INTEGER
SLAfSubsEnds AS INTEGER
CanVoteSL AS INTEGER
MaxPAttempts AS INTEGER
MaxLAttempts AS INTEGER
TakeOffBytes AS INTEGER '200 -> 200%
CreditAfDLXLim AS INTEGER
LoggingTog1 AS INTEGER
BufferSize AS INTEGER 'buffer is made in 4096 increments.
MinSpace AS LONG
MinULSpace AS LONG
LDDelSpace AS LONG
TargetSpace AS LONG
BeSureSpace AS LONG
LogoTimeOut AS INTEGER
AIHelpSpace AS LONG
ResetConnect AS INTEGER
ResetNoConnect AS INTEGER
CommPort AS INTEGER
SLEachOther AS INTEGER
TimeOut AS INTEGER
AINewUserMsg AS STRING * 3
Node AS INTEGER
CBVLDSL AS INTEGER
StatsSize AS INTEGER
RambleAddSL AS INTEGER
WorstSL AS INTEGER
WorstLogons AS INTEGER
LogLeader AS STRING * 5
MaxIDLines AS INTEGER
ChatWords AS INTEGER
NewFilesPtr AS LONG
Sysop AS STRING * 30 'Mixed case.
MassMail AS INTEGER
PPRSL AS INTEGER
SysopOnlyUL AS INTEGER
BiSL AS INTEGER
MaxRambles AS INTEGER
MaxPosts AS INTEGER
ModemBaud AS LONG
PRMsgStart AS STRING * 3
PRMsgPassed AS STRING * 3
PRMsgFailed AS STRING * 3
PRMinSL AS INTEGER
PRMaxSL AS INTEGER
DrDrives AS STRING * 5
StartTime AS STRING * 8
LastCallersSize AS STRING * 1
BiDayBaud AS INTEGER
DefaultLang AS STRING * 5
x AS STRING * 3
CreditAfDLDLim AS INTEGER
Key1 AS STRING * 20
Key2 AS STRING * 20
Key3 AS STRING * 20
PRCount AS INTEGER
FirstCommand AS STRING * 4
Toggles0 AS INTEGER
Toggles7 AS INTEGER
PostRingSL AS INTEGER
GIPID AS STRING * 8
G640x480x256 AS INTEGER
G800x600x256 AS INTEGER
DLMsgsMax AS INTEGER
MaxMsgsToPKT AS INTEGER
MenuSysThres AS STRING * 1
SumLogDays AS INTEGER
CallerNumber AS LONG
ModemInit AS STRING * 30
ModemAnswer AS STRING * 15
NewUserPswd AS STRING * 15
ProtDLPctgOvR AS INTEGER
ProtDLPDaysOvR AS INTEGER
GivePctgBEaDL AS INTEGER
GivePctgMEaDL AS INTEGER
Toggles1 AS INTEGER
Toggles2 AS INTEGER
Toggles3 AS INTEGER
Toggles4 AS INTEGER
Toggles5 AS INTEGER
Toggles6 AS INTEGER
ReviewLen AS INTEGER
LoggingTog2 AS INTEGER
DebugTog AS INTEGER
DescH AS INTEGER
DescHwDIZ AS INTEGER
ModemOffHook AS STRING * 30
MinSLLevelX AS INTEGER
WFCHelpBlk AS INTEGER
TakeOffMins AS INTEGER '200 -> 200%
MaxDLMsgsSize AS LONG
ShuttlePswd AS STRING * 30
MaxGMode AS INTEGER
Morning AS INTEGER
Afternoon AS INTEGER
Evening AS INTEGER
MinDescLength AS INTEGER
Toggles8 AS INTEGER
Toggles9 AS INTEGER
CreditAfDLx AS INTEGER
StartDate AS INTEGER
FPWorthInBytes AS LONG
Phone AS STRING * 20
FC4Msg AS LONG
RumorsLoc AS LONG
Future AS STRING * 20 'for still more stuff.
HourlyDate AS INTEGER
HourlyData AS STRING * 192
Colors1 AS STRING * 15
Colors2 AS STRING * 15
Colors3 AS STRING * 15
Colors4 AS STRING * 15
Colors5 AS STRING * 15
Colors6 AS STRING * 15
Colors7 AS STRING * 15
Colors8 AS STRING * 15
Colors9 AS STRING * 15
Colors10 AS STRING * 15
Colors11 AS STRING * 15
Colors12 AS STRING * 15
Colors13 AS STRING * 15
AllIs AS STRING * 30
DefaultMsgRC AS STRING * 10
PswdOverWrite AS STRING * 15
BBSLocation AS STRING * 30
BBSName AS STRING * 30
WFCWPChar AS STRING * 1
WFCWPFore AS STRING * 1
WFCWPBack AS STRING * 1
WFCCLHCoor AS STRING * 1
WFCCLVCoor AS STRING * 1
WFCCLPText AS STRING * 10
WFCCLSText AS STRING * 10
WFCCLWidth AS STRING * 1
WFCCLHeight AS STRING * 1
END TYPE
TYPE MessageBaseRecord 'Len = 108
PostSL AS INTEGER
ReadSL AS INTEGER
ScanSL AS INTEGER
StartTime AS INTEGER
EndTime AS INTEGER
BufferSize AS INTEGER
NextNumber AS LONG
SubType AS INTEGER '16 bits:
'1 true if all messages are from ANON.
'2 true if PRIvate (else PUBlic).
'3 true if NET mail.
'4 true if LOCKed.
'5 true if only sysop can DEL msgs.
'6 true if all messages go to ALL.
'7 true if show "hidden" net info.
'x true if net password protected.
'9 true if an EchoMail area.
'x whether toggled ON or OFF.
'rest for the future
MsgOp AS STRING * 30
Title AS STRING * 60
END TYPE
TYPE FileAreaRecord 'Len = 410
MinDLSL AS INTEGER
MaxDLSL AS INTEGER
MinULSL AS INTEGER
MaxULSL AS INTEGER
MinScanSL AS INTEGER
MaxScanSL AS INTEGER
StartTime AS INTEGER
EndTime AS INTEGER
BufferSize AS INTEGER
Attr AS INTEGER 'x whether toggled ON or OFF.
MaxMBSize AS INTEGER
Template AS INTEGER
NewFilesPtr AS LONG
FileOp AS STRING * 30
Path AS STRING * 64
Title AS STRING * 72
AlsoPath1 AS STRING * 36
AlsoPath2 AS STRING * 36
AlsoPath3 AS STRING * 36
AlsoPath4 AS STRING * 36
AlsoPath5 AS STRING * 36
AlsoPath6 AS STRING * 36
END TYPE
TYPE SummaryRec 'Len = 146
UserName AS STRING * 30 'Mixed case.
Location AS STRING * 30 'Mixed case.
BaudRate AS STRING * 20
CallerNum AS LONG
LastCallerNum AS LONG
DateOn AS INTEGER
TimeOn AS INTEGER
NodeOn AS INTEGER
TotalMinsUsed AS INTEGER
PagedSysop AS INTEGER 'Number of times they've tried to page sysop.
MsgsPosted AS INTEGER 'Number of public messages posted.
MsgsRcvd AS INTEGER
EMsgsPosted AS INTEGER 'Number of private messages posted.
EMsgsRcvd AS INTEGER
FMsgsPosted AS INTEGER 'Number of feedback messages posted.
NetMailSent AS INTEGER 'Number of NetMail letters sent.
NetMailRcvd AS INTEGER 'Number of NetMail letters received.
Dnlds AS INTEGER 'Files downloaded.
DLBytes AS LONG 'Bytes downloaded.
MinsDLing AS INTEGER 'Number of minutes downloading.
BadDLs AS INTEGER 'Number of bad DL's.
Uplds AS INTEGER 'Files uploaded.
ULBytes AS LONG 'Bytes uploaded.
MinsULing AS INTEGER 'Number of minutes uploading.
BadULs AS INTEGER 'Number of bad UL's.
Doors AS INTEGER 'Number of accesses to doors.
RamblesMade AS INTEGER
RamblesAdded AS INTEGER 'fixed
SL AS INTEGER 'new
MsgsReadOnLine AS INTEGER 'new
MsgsUploaded AS INTEGER 'new
MsgsDownloaded AS INTEGER 'new
END TYPE
DOOR
STRUCTURES
Introduction The door-exit files' purpose is to provide developer's with
access to user information, and to provide the BBS with the
necessary "continue operations" parameters.
To enable the BBS to do a cold restart while maintaining the
caller's information, and the information about the
connection.
Door Designers of doors for use under JDR_BBS should make the
designers following assumptions:
∙ The BBS is using a fossil. That all comm I/O should be
done through the fossil driver.
∙ The user and sysop are using ANSI drivers.
∙ The communications format is 8N1.
∙ All events occur after midnight, but after the user logs
off. So, A "day" should not be handled internally, but
rely on an external run of the program to say when a
"day" has changed. Since a user on at the midnight
rollover, should, and is, considered to still be working
during the previous day. In other words, don't let a
user access the door for two days just because they were
logged in before, during, and after midnight. Relying
on a "null run" of the door program also allows sysops
to "speed up time" by saying a day has passed whenever
they want--although normal operations have the BBS alone
door'ing to the door program to tell it a day has just
changed. If you need a date, use the user's logon date,
not the current date.
∙ A multi-tasking, multi-nodal environment.
∙ The full screen is usable for the user.
∙ The BBS hardware has a system clock.
∙ That the sysop isn't anywhere near the computer--should
the door program run into a problem.
∙ That the user is a novice.
∙ Expect to find each of the door files in the current
directory (the directory with your door program). So,
unless you want to use a config file, don't worry about
paths.
∙ That the BBS will allow a user access to that door as
many times as the user wants per day and per session (no
"once per day" doors).
∙ See note on Minute-Credits in Appendix B.
Upon exit to a door program, the BBS will write out a
JDRBBSxx.DEF file and (optionally) an alternate door type.
Only JDRBBSxx.DEF is read back in upon exit from the door.
The door-op is the one true sysop. When the door-op uses the
door, he'll get the 255 SL that most formats use (not mine
though--see SL fields). The regular BBS sysop...just another
door user.
If there are any problems with the way I implement the
various door-exit formats, or you would like me to add more
fields to my own format, please let me know.
See also: DOORS.DOC
For all I output the data in "perfect" form. That is, no spaces
line-based before or after the text/numbers. All the characters are
door formats upper-cased (except where noted).
When data is read back in, they will again be trimmed on both
ends, and upper-cased.
Thus the door program shouldn't have any trouble reading or
writing the data, as it gets it in perfect form, and It can
return it in imperfect form (eg. numbers with spaces in
front).
About the If only a quoted output is given (no description) then that
door will always be the output.
appendices
I've decided to only support the output of the various door
types. I could, very easily, support changes that were done
(such as bytes the user downloaded) to that door file--but
there are just too many unknowns. Rather than hassle trying
to figure it all out, I'll just make use of a single door
format that is read-in-able. A lot of the formats simply
don't have some of the more useful fields.
JDRBBSxx.DEF Where "xx" is a node number--note, 01 to 99. But really only
01 to 04 is used right now (it depends on the fossil's
abilities).
This is the *official* door type the BBS uses.
This is the only door type whose changes are accepted from a
door program.
See APPENDIX B for the precise definition.
SFDOORS.DAT Sourced from Spitfire version 3.1 doc's.
(Spitfire)
See APPENDIX C for the precise definition.
DORINFOx.DEF Sourced from OLECom version 3.0 doc's and RBBS version 17.3A
(RBBS) doc's and source code.
(QBBS)
(RA) The "x" represents values 1 to 9, 0, A to Z (in that order).
See APPENDIX D for the precise definition.
CHAIN.TXT Sourced Mycroft Door Library 3.0's source code and Telegard
(WWIV) Version 2.5i's source code.
(Telegard)
I output the extended (30 line) version of this format.
See APPENDIX E for the precise definition.
DOOR.SYS This format is an extension of the original GAP format.
(GAP)
It's definition, and the format I support, was in a file
authored by Raymond Clements, David Terry, and Kenny Gardner.
See APPENDIX F for the precise definition.
PCBOARD.SYS Sourced from Auntie version 5.11 doc's.
version 14.x
(PCBoard) The structure (the whole file) is used in the PCBoard14 data
(Auntie) type.
See APPENDIX G for the precise definition.
PCBOARD.SYS Sourced from SearchLight version 1.31 doc's and Mycroft Door
version 12.x Library 3.0's source code.
(PCBoard)
(SearchLight) The structure (the whole file) is used in the PCBoard12 data
type.
See APPENDIX H for the precise definition.
CALLINFO.BBS Sourced from Mycroft Door Library 3.0's source code.
(WildCat!) Extended and tested based on Mark Kitchen's "CALLINFO.BBS
Contents Reporter" program. Additional parts also came from
Maximus-CBCS 2.0.
I am not, as yet, sure which version of the CALLINFO.BBS this
is.
See APPENDIX I for the precise definition.
VISUAL This is the goal. This means full graphics interaction.
CYBERSPACE Comm/BBS program support is not a problem--at the very least
BY 1995 users can use this software as their comm program, but I
doubt it will be necessary.
Below I will outline the "next" needed routine. One of you
will have to design it. My graphics programming is very
limited, and even though that may change at any time, for now
I can't do it. When this routine is completed, I will
outline the next needed routine, and so on.
3-D routines to recognize hidden points/lines and not
draw them.
JOHN ROHNER Who am I?
29. Cartography degree from the University of Wisconsin
(Madison).
Many years ago I began putting my thoughts and ideas into a
computer text file because I could not juggle the many
scribbles of notes I created it (because I could not juggle
it all in my head). From this emerged a very creative and
diverse document: JDR_mmyy, which is still being updated bi-
monthly.
I needed and wanted fresh thoughts and ideas, so I started
Immortality just before I graduated.
I wrote this software because no package came close the
potential capabilities I saw for my own BBS. I view
programming as the perfect art: you can create it, it has
fractal-like qualities, and like a fractal you can always go
back to some small part of it and plummet to depths of art on
that piece of code.
During the first few releases of JDR_BBS, I started the
Church of the One--mostly just a tiny doctrine document, but
which I think contains the perfect foundation for a human's
belief structure.
This software shows its heritage: things like "Fellow
Sentient Beings" rather than "ALL" (which includes "all
rocks"? "all roads"?)--not "everyone" either--I mean "all
sentient beings everywhere". Other things too, like the
greater emphasis on user-doable stuff, emphasis on exchanging
of ideas, etc.
Now after 4 years, 10 releases, and 11 registrations, I'm
going to finally get myself a post-college career so I can
pay my bills.
I will be programming this software about an hour each day
(vs. the 5-12 I do now). I am determined to keep it the most
powerful BBS around. But too many of the "power tools" (VB,
3D graphics, TCP/IP, Windows, 386+ CPU, 8 MB RAM) cost money,
and I've been quite insane long enough avoiding a real job.
My ideal job is programming a GIS (Geographical Information
System). But there isn't much in the computer world I can't
do, so we'll see what I get.
APPENDIX B
Format of All lines below occupy a single line.
JDRBBSxx.DEF
This file may grow longer in the future, but the entries
below will always occur in their current order and position.
Contains Of Type And Is
─────────────────┬───────┬─────────────────────────────────────
name │A Z %1 │The caller's full name.
comm port │1 Z #48│Comm port being used, 0 = local user.
went-to-door time│T Z %33│The current time (door was started).
logon date │D O %35│The caller's logon date.
logon time │T O %34│The caller's logon time.
connect string │B O %36│The caller's actual connect string.
│ │(eg. 9600+ HST, "CONSOLE" if local.)
│ │From the CONNECT's database, not what
│ │the modem received.
Menu ID │3 X %9 │Menu ID exited from.
BBS name │B O !60│BBS name, defined in LINES.TXT.
BBS path │C O %28│Path to the bbs's main files.
exchange mins │4 O #37│The exchange rate in minutes.
exchange bytes │6 O #38│The exchange rate in bytes.
door-op's name │A O %5 │The door-sysop's full name.
│ │As far as the door program is
│ │concerned, this is the sysop.
log file │C O %55│Log file for door program to add to.
log leader │A O %43│Sysop-only logging lines leader.
type of logging │1 O %46│(0 = none, 9 = everything you
│ │got--door authors to choose what
│ │1 to 8 breaks up as).
trap chat file │C O %56│File to trap any chat sessions to.
trap all file │C O %57│File to trap entire I/O session to.
location │A O %2 │The caller's city and state
SL │5 O #3 │The caller's security level value.
bytes can DL │7 O #14│Number of bytes caller can download.
date last on │D O %20│Date the caller last called.
max door minutes │5 O #13│Maximum amount of time a caller may
│ │spend in the door (at this time).
SL 255 │2 M #65│Caller's SL re-mapped to 0 - 255
│ │scale. 255 = Door-Op.
phone number │P O %16│Caller's home phone number.
birth date │D O %27│Caller's birthdate. Given this, you
│ │can calculate their age if you want.
uploads │5 M #6 │Caller's number of uploaded files.
downloads │5 M #7 │Caller's number of downloaded files.
upload bytes │7 M #73│Caller's number of uploaded bytes.
download bytes │7 M #72│Caller's number of downloaded bytes.
toggles │5 M #49│16 bits, default is off, but when
│ │set: 1 = Sysop is on next
│ │ 2 = Keep screen blank
│ │ 3 = Trap chat to file
│ │ 4 = Trap all to file
│ │ rest for the future
minute-credits │5 M #52│User's minute-credits.
CPS rate │3 Z #36│CPS rate for the CONNECTion type
This breaks down to:
#01#48%33%35%34%36%09!60%28#37#38%05%55%43%46%56%57%01%02
#03#14%20#13#65%16%27#06#07#73#72#49#52#36
Types (1) This is a numeric line, ranging in value from 0 to 9.
Upon exit, it contains only numbers (no spaces).
(2) This is a numeric line, ranging in value from 1 to 255.
Upon exit, it contains only numbers (no spaces).
(3) This is a numeric line. Ranging in value from 1 to
32767. Upon exit, it contains only numbers (no spaces).
(4) This is a numeric line. Containing values ranging from
0 to 32767.
(5) This is a numeric line. Ranging in value from -32757 to
32767. Upon exit, it contains only numbers (no spaces)
and maybe a -'ve symbol.
(6) This is a numeric line. Containing values ranging from
0 to 2,100,000,000.
(7) This is a numeric line. Containing values ranging from
-2,100,000,000 to 2,100,000,000.
(A) All upper-cased letters. Assume nothing about the
length, or the number of space-delineated words, or the
characters making it up.
(B) This is a "take as is" line. When you redisplay the
information, you shouldn't modify it. Example: don't
uppercase, or strip out ANSI codes in the BBS name.
Assume nothing about the length, or the number of space-
delineated words, or the characters making it up.
(C) All upper-cased letters. A single word, no leading or
trailing spaces. If a path is specified, then that path
exists. If a file name is included, then that file may
or may not already exist.
(D) This is a date line, conforming to the format: mm/dd/yy.
(M) This is a modifiable numeric field. This line, upon
return, must contain either a "+" or "-" and an amount,
if the entry is to be changed. Thus, if I output
"32000", and the door wants to add "5000" to give the
user a total of "37000", then the door must modify this
line to contain "+5000". If it should happen that a -
've value was outputted, and you wish to return with a
subtracted value, then a comparison will be done, if the
two (starting and returning) numbers aren't the same,
then the subtraction is done.
Thus: Starting Returning Action
1000 1000 ignored
1000 1050 ignored
1000 +100 1100 = 1000 + 100
1000 -100 900 = 1000 - 100
-100 -100 ignored
-100 -105 -205 = -100 - 105
-100 100 ignored
-100 105 ignored
-100 +100 0 = -100 + 100
1000 1000 + 100 ignored
1000 +1050A 1000 = 1000 + 0
1000 +ABC55 1000 = 1000 + 55
(O) This is an output only line. Upon return, the line is
ignored.
(P) This is a phone number line. The form is: (###) ###-
#### or ###-#### or blank.
(T) This is a time field. Of the form: hh:mm:ss
(X) Of the form ">xxx" where "x" can be any alpha-numeric
character.
(Z) Don't modify this line at all. This is a system read-in
line.
In sum:
Lines with a (O) aren't read back in.
Lines with a (Z) are read back in but you shouldn't change
them.
Lines with no (O) or (Z) are read back in, and any changes
you made will be utilized.
Log Leader This is text (such as "+", "***", or "HI YA!") which should
be attached to the front of all sysop-only/non-user lines of
text to be sent to the log file.
Examples: "John Doe won the planet Taurus".
"John Doe won the lottery on mm/dd/yy."
"Lottery won by John Doe, given 25 extra mins."
"**John Doe played for 25 minutes."
"**John Doe attempted chat."
"**Loss of carrier."
Given a "log leader" line of "**".
Exchange Rates The exchange rate, example: 10 minutes/1,000,000 bytes.
Thus the two fields aren't defined in terms of a single unit:
exchange bytes <> 1 exchange min
exchange mins <> 1 exchange byte
but rather in a "together" form: x exchange minutes = y
exchange bytes. Thus, 1 minute is equal to y\x bytes.
Max Door Maximum amount of time a user may spend in the door.
Minutes
This should only used for non-file transfer door programs.
When a door program want's to know how much time to allow the
user access to the door, it should check BOTH Download
Minutes and Max Door Minutes, and whichever is SMALLER.
This field, Max Door Minutes, is a generalized maximum for
all users. But if a user has only 5 download minutes, then he
can't use this door for more than 5 minutes (and vice-versa,
if this field has 32767 and the user has 180 download
minutes, they can this door for 180 minutes).
The door program should not subtract from this field, or
Download Minutes, the time they spend in the door.
Toggles These are things your door program may or may not support.
All are toggles, which, if the door program supports, should
have some sort of command key so that the sysop can toggle it
at any time. If the door program doesn't support it, then it
shouldn't change the values either.
Bit 1 (Toggles and 1): Sysop is on next. After this caller
logs off, the phone is taken off-hook so the sysop can logon.
Bit 2 (Toggles and 2): Keep screen blank. Clear the local
(console) screen, don't write anything to it.
Bit 3 (Toggles and 4): Trap chat to file. If the program has
chat ability, and this is set, then send the text to the chat
trap file as well.
Bit 4 (Toggles and 8): Trap all to file. If set, and the
program supports it, then all I/O should be sent to the trap
file as well.
SL 255 Most BBS's, and nearly all door-exit format's, rely on the SL
being a value from 0 to 255.
The value here, in my door-exit format, represents the user's
SL as mapped back to their defined SL ranges. Thus 1 is the
lowest. If a sysop defined more than 255 SL ranges, then
this could be larger than 255--but I put the probability as
extremely low.
Compare user name against door-op name to determine if the
current user is "sysop".
If the door program has some feature that allows movement of
SL, then it should change this field.
A zero value here is possible, but probably means something
serious, like a bug or a locked out user.
Minute-Credits The software exchanges these at the exchange rate (example:
10 minute-credits are equal to 1,000,000 can-download bytes).
Door authors should use this to provide "awards"/gambling
value/etc. for games. However, keep it in perspective. The
number ranges from -x to 32767 (where x is daily granted
minutes), thus you'll most likely want to use this as a
multiplier (example, each minute-credit = $100,000).
Preferably, it'd be best to make use of the sysop's exchange
rate setting to define the proportion to use for each unit
(example, sysop has 10 = 1,000,000 or 1 = 100,000 or .1 =
10,000, etc. Another sysop has 10 = 2,000,000 or 1 =
200,000, etc.). Preferably, if the door program uses a
configuration file, there should be an entry for exchange
rate to use.
A user isn't allowed to access the door if their minute-
credits are -'ve and larger in size than the daily time limit
(eg. -61 is larger than a daily time limit of 60 minutes).
Misc. The way I imagine it:
A door program loads in the above information. It turns on
the fossil driver using the comm port provided. It then does
whatever it does, doing I/O through the fossil.
Fossil stuff Fossil commands are called using interrupt (INT) 14H. .DX
containing the comm port (0 to n, where COM1 is 0) and .AX
containing what we wish the fossil to do (see fossil's docs).
In Basic, the call is of the form:
CALL Interrupt(&H14,InRegX,OutRegX)
I've reduced it somewhat by using my own calling routine:
FosIntAX
The source code is included (assembly) and you could probably
link it with your program.
Result% = FosIntAX(CommPort,DoWhat) is the call.
CommPort is an integer ranging from 1 to n (1 = COM1, etc., 0
means "don't use fossil" or local mode--no comm I/O) and
DoWhat is an integer containing what AX would normally
contain.
Below are FosIntAX call's I use to do various things:
Result% = FosIntAX(CommPort,&H1C00)
Turn fossil on/start the fossil (do this at start of
program).
Carrier% = FosIntAX(CommPort,&H0300)
If BitTest(Carrier%,8) then carrier is detected still. (Bit
7 on a 0..7 scale in AL is what BitTest(,8) checks). (Which
is equivalent to a IF Carrier% AND 128 THEN...)
Character% = FosIntAX(CommPort,&H2000)
Get a character (input) from the port (if <> -1 then we got
one--doesn't wait so you'll want to loop this).
Result% = FosIntAX(CommPort,&H0A00)
Purge the input buffer.
Result% = FosIntAX(CommPort,&H0B00 + Character%)
Sends Character% (the ASCII value of the character to send)
out the port.
Result% = FosIntAX(CommPort,&H0900)
Purge the output buffer.
Result% = FosIntAX(CommPort,&H1D00)
Turn fossil off/end the fossil (do this before ending the
program, although not required).
Using FosIntAX makes life easy, because it properly handles a
zero entry by not contacting the fossil driver. In your door
program, you'll always want to send out to both the screen
(via an ANSI driver, or even Basic's PRINT, for example) and
the comm port (using a fossil).
APPENDIX C
SFDOORS.DAT 1 User Number (* the record number in SFUSERS.DAT of the caller *)
2 User Name (* the full name of the caller *)
3 Password (* the password of the caller *)
4 First Name (* the first name of the caller *)
5 Baud Rate (* baud rate of the caller - i.e. 2400 { 0 if local } *)
6 Comm port (* COMM port being used by SPITFIRE *)
7 Time Left (* number of minutes the caller has left this log on *)
8 Time (* number seconds since midnight when entering the door *)
9 Path (* the path in which SPITFIRE.EXE resides {C:\SF\} *)
10 Ansi_On (* TRUE if caller is using ANSI else FALSE *)
11 SecLevel (* the security level of the caller *)
12 Uploads (* the number of uploads the caller has made *)
13 Downloads (* the number of downloads the caller has made *)
14 This Time (* total number of minutes allowed for this call *)
15 Time On (* number of seconds since midnight when logged on *)
16 Extra Time (* number of seconds the caller has gained since log-on *)
17 Sysop Next (* TRUE if Sysop next feature has been activated *)
18 Front End (* TRUE if SPITFIRE was booted from a front end program *)
19 No DTE Lock (* TRUE if configured for Software Data Flow Control *)
20 MaxBaud (* maximum baud of the system *)
21 ErrCorrect (* TRUE if error correction connection *)
22 LastMConf (* last message conference *)
23 LastFArea (* last file area *)
24 Node Number (* Node on which the caller is logged *)
25 DLs Per Day (* Number of files allowed to be downloaded per day *)
26 DLs Today (* Number of files the caller has downloaded this day *)
27 Daily Bytes (* Number of downloadable bytes per day *)
28 Bytes Today (* Number of bytes the caller has downloaded this day *)
29 TotalUK (* Number of K bytes uploaded by the caller *)
30 TotalDK (* Number of K Bytes downloaded by the caller *)
31 Phone # (* The callers phone number *)
32 City/State (* The callers city and state *)
How I interpret the SFDOORS.DAT "specs":
1 #1 User's record number
2 %1 User's full name
3 %4 User's full password
4 %3 User's first name--the word before the first space
5 #32 Baud user CONNECTed at (0 if local)
6 #48 Communications port being used
7 #13 Download/door minutes caller has left
8 #44 Seconds since midnight of current time
9 %29 Door-use directory
10 %25 "TRUE"
11 #65 User's security level (1 - 255) (not value) (255 = sysop)
12 #6 User's number of files uploaded
13 #7 User's number of files downloaded
14 #13 --same as 7--
15 #44 --same as 8--
16 #24 "0"
17 %24 "FALSE"
18 %24 "FALSE"
19 %70 "FALSE" if locked baud (toggle) is set, else "TRUE"
20 #5 Modem init baud rate (0 if local)
21 %25 "TRUE"
22 #24 "0"
23 #24 "0"
24 #71 Node number (1...n) of connection
25 #24 "0"
26 #24 "0"
27 #24 "0"
28 #24 "0"
29 #9 User's upload bytes total in K
30 #10 User's download bytes total in K
31 %16 User's home phone number
32 %2 User's location
This breaks down to:
#01%01%04%03#32#48#13#44%29%25#65#06#07#13#44#24%24%24%70
#05%25#24#24#71#24#24#24#24#09#10%16%02
APPENDIX D
DORINFOx.DEF 1 System Name (as defined in CED)
2 Sysop's First Name (as defined in UED record #1)
3 Sysop's Last Name (as defined in UED record #1)
4 COM Port (COM1 or COM2, COM0 for local)
5 Baud Rate, Parity, Data Bits, Stop Bits
6 0
7 User's First Name
8 User's Last Name
9 User's City and State
10 Graphics Mode (0=OFF, 1=ON)
11 Privilege Level (0-255)
12 Time Left in Minutes
1 The name of the RBBS-PC system
2 The SysOp's first name
3 The SysOp's last name
4 The communications port being used
5 The baud rate and parity with which the caller logged on,
and the baud rate at which RBBS-PC is connected to the
modem
6 The network type (if any) RBBS-PC is running in
7 The caller's first name
8 The caller's last name
9 The city and state the caller is from
10 The caller's graphics preferences
11 The caller's security level
12 The caller's time remaining in the current session
13 Whether fossil driver is used (-1 = yes, 0 = no)
The RBBS source code suggests:
line 5 is "19200 BAUD,N,8,1",
lines 8 and 9 is "SYSOP" and "", respectively, if the user
is the sysop. Not supported because door programs don't
support it (seeing SYSOP as the name isn't very
participatory).
How I interpret the DORINFOx.DEF "specs":
1 !60 BBS's name
2 %61 Door-Op's first name
3 %62 Door-Op's last name
4 %63 "COMx" where x is the comm port number (COM0 for local)
5 %10 "xxxxx BAUD,N,8,1" where xxxxx is the modem init baud rate (0 for local)
6 #24 "0"
7 %3 User's first name
8 %8 User's last name
9 %2 User's city and state
10 #25 "1"
11 #65 User's security level (not value)(1-255)(255 if Door-Op)
12 #13 Download/door minutes caller has left
13 #30 "-1"
For line 10 (color preference) there is a difference between
RBBS and QuickBBS. When asked to choose which DORINFOx.DEF
file you want, you want the QuickBBS version.
This breaks down to:
!60%61%62%63%10#24%03%08%02#25#65#13#30
APPENDIX E
CHAIN.TXT 1 User number
2 Users alias
3 Users real name
4 Amateur radio callsign
5 Age
6 Sex ("M" or "F")
7 Gold (game credits)
8 Last date on BBS
9 Width of screen
10 Lines in screen
11 Security level (0 - 255, sysop = 255)
12 SysOp flag (1 if sysop, else 0)
13 Co-SysOp flag (1 if co-sysop, else 0)
14 ANSI graphics flag (1 if ansi)
15 Remote user flag (0 if local, else 1)
16 Time remaining in seconds (float) (use .0 at end)
17 General text file directory
18 Data file directory
19 Path/Filename for text sysop log
20 Current baud rate (KB = local)
21 Comm port number
Sourced from Telegard version 2.5i's source:
20 "0" instead of "KB"
22 BBS name
23 Sysop's full name
24 Seconds since midnight
25 TIme used ("0")
26 Upload K
27 Uploads
28 Download K
29 Downloads
30 Comm port settings "8N1"
How I interpret the CHAIN.TXT "specs":
1 #1 User's record number
2 %1 User's full name
3 %1 --same as 2--
4 %30 ""
5 #50 User's age
6 %51 "M" or "F" depending on user's sex type
7 #52 User's minute-credits
8 %20 "mm\dd\yy" last date user was on.
9 #53 "80"
10 #18 "24"
11 #65 User's security level (1 to 255) (not value) (255 = door-sysop)
12 #66 "1" if door-sysop, else "0"
13 #58 "1" if co-sysop, else "0"
14 #25 "1"
15 #4 "0" if local, else "1"
16 %12 Time left in seconds (add a ".0" to the end)
17 %29 Door use directory.
18 %29 --same as 17--
19 %55 Callers log pathname
20 %7 "KB" if local, else CONNECT baud rate
21 #48 Comm port (0 if local)
22 !60 BBS Name
23 %5 Door-Sysop's full name
24 #44 Seconds since midnight
25 #24 "0"
26 #9 User's upload bytes total in K
27 #6 User's upload files total
28 #10 User's download bytes total in K
29 #7 User's download files total
30 %67 "8N1"
This breaks down to:
#01%01%01%30#50%51#52%20#53#18#65#66#58#25#04%12%29%29%55
%07#48!60%05#44#24#09#06#10#07%67
APPENDIX F
DOOR.SYS COM1: <-- Comm Port - COM0: = LOCAL MODE
2400 <-- Baud Rate - 300 to 38400
8 <-- Parity - 7 or 8
1 <-- Node Number - 1 to 99
19200 <-- DTE Rate. Actual BPS rate to use. (kg)
Y <-- Screen Display - Y=On N=Off
Y <-- Printer Toggle - Y=On N=Off
Y <-- Page Bell - Y=On N=Off
Y <-- Caller Alarm - Y=On N=Off
Rick Greer <-- User Full Name
Lewisville, Tx. <-- Calling From
214 221-7814 <-- Home Phone
214 221-7814 <-- Work/Data Phone
PASSWORD <-- Password
110 <-- Security Level
1456 <-- Total Times On
03/14/88 <-- Last Date Called
7560 <-- Seconds Remaining THIS call
126 <-- Minutes Remaining THIS call
GR <-- Graphics Mode - GR=Graph, NG=Non-Graph
23 <-- Page Length
Y <-- User Mode - Y = Expert, N = Novice
1,2,3,4,5,6,7 <-- Conferences/Forums Registered In (ABCDEFG)
7 <-- Conference Exited To DOOR From (G)
01/01/99 <-- User Expiration Date (mm/dd/yy)
1 <-- User File's Record Number
Y <-- Default Protocol - X, C, Y, G, I, N, Etc.
0 <-- Total Uploads
0 <-- Total Downloads
0 <-- Daily Download "K" Total
999999 <-- Daily Download Max. "K" Limit
Up until this was the old gap format.
10/22/88 <-- Caller's Birthdate (kg)
G:\GAP\MAIN <-- Path to the MAIN directory (where User File is) (kg)
G:\GAP\GEN <-- Path to the GEN directory (kg)
Michael <-- Sysop's Name (name BBS refers to Sysop as) (kg)
Stud <-- Alias name (rc)
00:05 <-- Event time (hh:mm) (rc)
Y <-- If its an error correcting connection (Y/N) (rc)
N <-- ANSI supported & caller using NG mode (Y/N) (rc)
Y <-- Use Record Locking (Y/N) (rc)
14 <-- BBS Default Color (Standard IBM color code, ie, 1-15) (rc)
10 <-- Time Credits In Minutes (positive number) (rc)
07/07/90 <-- Last New Files Scan Date (mm/dd/yy) (rc)
14:32 <-- Time of This Call (hh:mm) (rc)
07:30 <-- Time of Last Call (hh:mm) (rc)
6 <-- Maximum daily files available (rc)
3 <-- Files d/led so far today (rc)
23456 <-- Total "K" Bytes Uploaded (rc)
76329 <-- Total "K" Bytes Downloaded (rc)
A File Sucker <-- User Comment (rc)
10 <-- Total Doors Opened (rc)
10283 <-- Total Messages Left (rc)
How I interpret the DOOR.SYS "specs":
1 %48 "COMx:" where x is 0 if local, else the comm port
2 #5 Baud initiated modem at (0 if local)
3 #23 "8"
4 #71 Node number
5 #5 --same as 2--
6 %21 "Y" to send text to screen also, else "N"
7 %22 "N"
8 %22 "N"
9 %22 "N"
10 %1 User's full name
11 %2 User's full address
12 %16 User's home phone number
13 %17 User's BBS phone number
14 %4 User's password
15 #65 User's security level (0 to 255) (not value) (255 = sysop)
16 #8 User's total number of logons
17 %20 Last date user called (mm/dd/yy)
18 #12 Download seconds remaining this call
19 #13 Download minutes remaining this call
20 %23 "GR"
21 #18 "24"
22 %22 "N"
23 %30 ""
24 %30 ""
25 %26 Subscription expiration date (mm/dd/yy)
26 #1 User's record number
27 %14 User's protocol of choice
28 #6 User's total uploaded files
29 #7 User's total downloaded files
30 #24 "0"
31 #24 "0"
32 %27 User's birth date
33 %29 Path for door use
34 %29 --same as 33--
35 %61 Sysop's first name
36 %61 --same as 35--
37 %40 "00:00"
38 %45 "Y"
39 %22 "N"
40 %45 "Y"
41 #2 "15"
42 #24 "0"
43 %20 --same as 17--
44 %44 Time of user connection (HH:MM)
45 %44 --same as 44--
46 #53 "80" (only because it's a number I use elsewhere)
47 #24 "0"
48 #9 Total bytes uploaded in K
49 #10 Total bytes downloaded in K
50 %19 User's comment
51 #31 Total number of doors opened
52 #11 Total number of messages posted
This breaks down to:
%48#05#23#71#05%21%22%22%22%01%02%16%17%04#65#08%20#12#13
%23#18%22%30%30%26#01%14#06#07#24#24%27%29%29%61%61%40%45
%22%45#02#24%20%44%44#53#24#09#10%19#31#11
APPENDIX G
PCBOARD.SYS Length Offset Purpose
version 14.x ------ ------- -----------------------------------------------------
2 1- 2 Display On/Off ("-1"=on, " 0"=off)
2 3- 4 Printer On/Off ("-1"=on, " 0"=off)
2 5- 6 Page Bell On/Off ("-1"=on, " 0"=off)
2 7- 8 Caller Alarm On/Off ("-1"=on, " 0"=off)
1 9- 9 Sysop Flag (N, X or Space)
2 10- 11 Error Corrected Connect ("-1"=yes, " 0"=no)
1 12- 12 Graphics Mode of Caller ("Y", "N", "7")
1 13- 13 Node CHAT Status ("U" or "A")
5 14- 18 BPS Rate to Open Modem Port At
5 19- 23 BPS CONNECT rate of caller or "Local"
2 24- 25 User's Database Record Number MKI$
15 26- 40 User's First Name Padded to 15 Spaces
12 41- 52 Password of Caller padded to 12 spaces
2 53- 54 Time User Logged on in Minutes Format MKI$
2 55- 56 Time used so far that day (0 or a -xx number) MKI$
5 57- 61 Time Caller Logged On (hh:mm format)
2 62- 63 Allowed time of user in minutes from PWRD file MKI$
2 64- 65 Allowed D/L Bytes from the PWRD file MKI$
1 66- 66 Area of the board user exited from
5 67- 71 Areas of the board the user has been in
5 72- 76 Area the user has done a "Y" command on
2 77- 78 Highest Area "Add Time" so far in minutes MKI$
2 79- 80 Upload/Sysop CHAT time credit so far that call in
4 81- 84 Language being used (" ", "FRE", etc.)
25 85-109 Complete Name of caller (first & Last)
2 110-111 Calculated minutes remaining MKI$
1 112-112 The Node number of that caller
5 113-117 The scheduled event time in hh:mm format
2 118-119 Is the event time active? ("-1"=yes, " 0"=no)
2 120-121 Slide the event? ("-1"=yes, " 0"=no)
4 122-125 "Memorized" message number MKS$
1 126-126 COM Port # (0-8)
2 127-128 " " future
--- ------- -----------------------------------------------------
128 1-128
How I interpret the PCBOARD.SYS "specs":
TYPE PCBoard14
*21 BlankScr AS STRING * 2 '"-1" display on, " 0" display off (blank screen)
-- Misc1 AS STRING * 11 '" 0 0 0 -1YA"
*5 BPSRate AS STRING * 5 'Initial modem baud rate (" 0"/"19200"/" 2400"/etc.)
*32 Connect AS STRING * 5 'Caller's CONNECT rate.("LOCAL"/"19200"/" 2400"/etc.)
*1 RecNum AS INTEGER 'User's record number.
*3 FirstName AS STRING * 15 'User's first name.
*4 Password AS STRING * 12 'User's password.
*44 LogonMins AS INTEGER 'Minutes since midnight.
-- TimeUsed AS INTEGER 'Zero.
-- LogonTime AS STRING * 5 'HH:MM of current time.
*13 MinsAvail AS INTEGER 'Download/door minutes left today.
-- Misc3 AS STRING * 21 'All blank.
-- UserName AS STRING * 25 'User's full name.
-- MinsAvail2 AS INTEGER 'Same as MinsAvail.
*71 Node AS STRING * 1 'Node number. ("1" to "9")
-- Misc4 AS STRING * 13 '"00:00 0-1 "
*48 CommPort AS STRING * 1 'Comm Port.
-- Misc6 AS STRING * 2 'All blank.
END TYPE
This breaks down to:
*21*05*32*01*03*04*44*13*71*48
APPENDIX H
PCBOARD.SYS Field
version 12.x Length Format Contents
------ ------ --------
1 2 Ascii Display on/off ("-1", " 0")
2 2 Ascii Printer on/off ("-1", " 0")
3 2 Ascii Page bell on/off ("-1", " 0")
4 2 Ascii Caller page on/off ("-1", " 0")
5 2 Ascii Sysop next on ("-1", " 0")
6 4 Ascii Current baud rate (" 300", "1200", "loca", etc.)
7 27 Ascii User's name (padded with spaces)
8 15 Ascii User's first name (padded with spaces)
9 2 Ascii ANSI status ("-1", " 0")
10 12 Ascii Password (always blank; see note below)
11 2 MKI$ User's record number
12 4 MKS$ Time user logged in, in seconds from midnight (LONG)
13 4 MKS$ User's time limit, in seconds (LONG)
14 4 MKS$ Current time, in seconds from midnight (LONG)
15 5 Ascii Time user logged in, as HH:MM
16 2 MKI$ Current subboard number
17 20 --- Unused (padded with binary zeros)(conference flags)(2 INT's?)
18 8 MKD$ Download limit in Kbytes (CHAR * 8)
19 2 --- Unused (padded with binary zeros)(upload time credit)
20 4 Ascii Language version (not used; padded with spaces)
21 2 Ascii Error correcting modem ("-1", " 0")
22 1 Ascii Chat Status (always "A" in single-user systems)
Notes:
Fields indicated as MKI$, MKS$, and MKD$ correspond to the
integer, real number, and double-precision real number format
as found in Microsoft BASIC. Since PCBOARD is written in
BASIC, it uses BASIC real number formats; if you want to
access these values from a different language, you will have
to perform a conversion. The BASIC real number format is
given in Microsoft's reference manual.
How I interpret the PCBOARD.SYS "specs":
TYPE PCBoard12
*21 BlankScr AS STRING * 2 '"-1" display on, " 0" display off (blank screen)
*1 Misc1 AS STRING * 8 '" 0 0 0 0"
*32 BPSRate AS STRING * 4 'Initial baud rate. ("1920" or "2400" or "Loca")
-- UserName AS STRING * 27 'User's full name.
*3 FirstName AS STRING * 15 'User's first name.
-- Misc2 AS STRING * 2 '"-1"
*4 Password AS STRING * 12 'User's password.
-- RecNum AS INTEGER 'User's record number.
*44 LogonSecs AS LONG 'Seconds since midnight.
*12 SecsAvail AS LONG 'Download/door seconds left.
-- LogonSecs2 AS LONG 'Same as LogonSecs.
-- LogonTime AS STRING * 5 'HH:MM of current time.
-- Misc3 AS STRING * 39 'All blank with "-1A" at the end.
END TYPE
This breaks down to:
*21*01*32*03*04*44*12
Sourced from WildFire:
Doors for PCBoard V 12.x REQUIRE the presence of a file
called PCBOARD.DAT in your SF directory. This file is
NOT built by WF because it is a static file and is only
created once and then left alone. It holds the comport
number the system is running on and 12.x doors open it
to find the port. If you don't have a PCBOARD.DAT un-
pack the one that came with the Wildfire package, follow
the short doc file and configure it for your system.
Then place it in your SF directory and forget about it.
If this is true, then I'll make a PCBOARD.DAT file also (I'll
use a BLOCKS.TXT block to store it).
In general, this door-exit type needs more testing by me.
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
*** PCBoard Version 12.0 data file *** (PCBOARD.DAT)
Sysop,WILDCAT,-1,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,,,,,,,,,,,,,,,,,30,,,COM1:,9600,-1,00:01,24:00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,02:30,0,00,37,0,0,0
Be sure to call THE WALL whenever you need a Live Program
714-775-4974
1,-1,32,-1,-1,0,0,0,0,8,0,0,0,-1,0,0,0,0,100,0,0,20,0,0
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
APPENDIX I
CALLINFO.BBS Line 1 --> User name
Line 2 --> baud rate 0=2400,1=300,2=1200,3=9600
Line 3 --> User city and state
Line 4 --> User Access level
Line 5 --> Logon time left in minutes
Line 6 --> Either COLOR or MONO user setting
Line 7 --> User password
Line 8 --> User Record number
Line 9 --> Total minutes lon on bbs
Line 10 --> Time entered door hh:mm
Line 11 --> Time called bbs hh:mm
Line 12 --> User confernces join
Line 13 --> User daily d/l total
Line 14 --> User max d/l per day
Line 15 --> User daily d/l no of bytes in k
Line 16 --> User max d/l in k
Line 17 --> User phone number
Line 18 --> Time / date last call
Line 19 --> Either NOVICE or EXPERT - user mode
Line 20 --> N=none, X=Xmodem, C=Xmodem/crc etc
Line 21 --> Last new file search MM/DD/YY
Line 22 --> User total number of call
Line 23 --> User line per page or screen
Line 24 --> Last msg no read
Line 25 --> User total u/l since first log-on
Line 26 --> User total d/l since first log-on
Line 27 --> Either 7 {Databits} or 8 {Databits}
Line 28 --> Either LOCAL or REMOTE
2 "4" = 19200
29 Comm port (1, 2, 3, etc.)
30 Date of birth (mm/dd/yy)
2 "5" = Local
11 "hh:mm dd/mm/yy" format
18 "dd/mm/yy hh:mm" format
29 "COMx"
30 --same as 2--
31 "FALSE"
32 "Normal Connection"
33 "dd/mm/yy dd:mm" format (subscription ends date?)
34 task number
35 node number
'This third collection is not yet implemented until I have
'a chance to double check them.
How I interpret the PCBOARD.SYS "specs":
1 %1 User's full name
2 #39 "0"=2400, "1"=300, "2"=1200, "3"=9600, "4"=19200
3 %2 User's city and state
4 #65 User's security level (1-255, 255 = sysop)(not value)
5 #13 Download minutes remaining
6 %11 "COLOR"
7 %4 User's password
8 #1 User's record number
9 #24 "0"
10 %44 Current time (HH:MM)
11 %44 --same as 10--
12 %30 ""
13 #24 "0"
14 #24 "0"
15 #24 "0"
16 #24 "0"
17 %16 User's home phone number
18 %18 Current time and last date on in "xx:xx:xx xx/xx/xx" format
19 %6 "NOVICE"
20 %14 Single character of user's protocol
21 %20 Date user last called (MM/DD/YY)
22 #8 Total number of logons for the user
23 #18 "24"
24 #24 "0"
25 #6 User's total file uploads
26 #7 User's total file downloads
27 #23 "8"
28 %39 "LOCAL" if local, else "REMOTE"
29 #48 Comm port (1, 2, 3, etc.)(0 = local)
30 %27 User's date of birth (mm/dd/yy)
This breaks down to:
%01#39%02#65#13%11%04#01#24%44%44%30#24#24#24#24%16%18%06
%14%20#08#18#24#06#07#23%39#48%27
APPENDIX J
FidoNet
FTSC Document Contents Juggernaut status
============= ==================================== ==========================
FTS-0001 015
FTS-0002 ── *Obsoleted by FTS-0005*
FTS-0003 ── *Obsoleted by FTS-0006*
FTS-0004 001 EchoMail Specification Complete(d) Support
FTS-0005 001 The Distribution Nodelist Nothing To Implement
FTS-0006 002
FTS-0007 003 SEAlink protocol NOT SUPPORTED
FTS-0008 003 "Bark" type FidoNet file requests NOT SUPPORTED
FTS-0009 001 ^aMSGID: / ^aREPLY: Complete(d) Support
FTS-LIST 038
FTSCLIST 048 Directory of all FTSC files Nothing To Implement
FTSCPROD 042 FTSC product code list Nothing To Implement
FSC-0001 ── *Obsoleted by FTS-0001*
FSC-0002 ── *Obsoleted by FTS-0005*
FSC-0003 001 FidoNet Route Files (ROUTE.CTL) NOT SUPPORTED
FSC-0004 001
FSC-0005 001 OPUS-CBCS Matrix Password Methods NOT SUPPORTED
FSC-0006 ── *Obsoleted by FTS-0006*
FSC-0007 002 RFC822-Style Message Format NOT SUPPORTED(*)
FSC-0008 ── *Obsoleted by FSC-0015*
FSC-0009 001 Nodelist (comment) -> capabilities NOT SUPPORTED
FSC-0010 001 RESYNC--sealink protocol enhancement NOT SUPPORTED
FSC-0011 001 Alternative FTS-0001 state tables NOT SUPPORTED
FSC-0012 ── *Obsoleted by FTS-0004*
FSC-0013 ── *Obsoleted by FTS-0008*
FSC-0014 001 TYPE-3: A Bundle Proposal NOT SUPPORTED
FSC-0015 001 FOSSIL Function Chart, Version 5 Complete(d) Support
FSC-0016 001 FidoNet mail session startup NOT SUPPORTED
FSC-0017 001 Document Naming Nothing To Implement
FSC-0018 ── *Obsoleted by FTS-LIST*
FSC-0019 001 SEALINK File Transfer Protocol NOT SUPPORTED
FSC-0020 001 Alternate Nodelist Flag Proposal NOT SUPPORTED
FSC-0021 001 VFOSSIL - OS/2-Subset Video FOSSIL NOT SUPPORTED
FSC-0022 002
FSC-0023 001
FSC-0024 001 Proposal for a Type-3 Mail Bundle NOT SUPPORTED
FSC-0025 001 AVATAR Complete(d) Support
FSC-0026 ── *Obsoleted by FTS-LIST*
FSC-0027 ── *Obsoleted by FTS-0005*
FSC-0028 001 Schematic of .Tic file NOT SUPPORTED
FSC-0029 ???
FSC-0030 001 MESSAGE-ID / IN-REPLY-TO NOT SUPPORTED(*)
FSC-0031 001 ^aEID: NOT SUPPORTED
FSC-0032 001 Uniform EchoMail Quoting Style NOT SUPPORTED
FSC-0033 001 ^aFMSGID: / ^aFREPLY: NOT SUPPORTED
FSC-0034 002 Gateways to and from FidoNet Nothing To Implement
FSC-0035 001 ^aREPLYADDR / ^aREPLYTO NOT SUPPORTED
FSC-0036 001 GROUP MAIL SPECIFICATIONS / ^aAREA: NOT SUPPORTED
FSC-0037 001 Extending Avatar (AVT/0) NOT SUPPORTED
FSC-0038 001 ^aDOMAIN NOT SUPPORTED
FSC-0039 004 A Type-2 Packet Extension Proposal NOT SUPPORTED
FSC-0040 001 Extended Modem Handling Nothing To Implement
FSC-0041 ── *Obsoleted by FTS-0009*
FSC-0042 001 Gateway Agreement/WWIVnet Nothing To Implement
FSC-0043 002 Hints on Recognizing Control Lines Nothing To Implement
FSC-0044 002 ^aPTH: / FtnPth: NOT SUPPORTED
FSC-0045 001 A New Packet Header Format NOT SUPPORTED
FSC-0046 002 ^aPID: Complete(d) Support
FSC-0047 001 ^aSPLIT: NOT SUPPORTED
FSC-0048 001 A Proposed Type-2 Packet Extension NOT SUPPORTED
FSC-0049 001 Passing Domain Information NOT SUPPORTED(*)
FSC-0050 001 ^aCHARSET: NOT SUPPORTED
FSC-0051 001 Transferring Special Characters NOT SUPPORTED
FSC-0052 001 ^aZPTH: NOT SUPPORTED
FSC-0053 ???
FSC-0054 ???
FSC-0055 ???
FSC-0056 001 EMSI/IEMSI Protocol Definitions Complete(d) Support
FSC-0057 002 Echo Area Managers / ^aRESCANNED NOT SUPPORTED
FSC-0058 001 ^aDEST / ^aORIG / ^aROUTE NOT SUPPORTED
(*) not supported in Fido messages, but may support in Internet messages.
Detailia (or "not 100%" supported):
FSC-0015 001 FOSSIL Function Chart, Version 5 Complete(d) Support
I use X00's implemention of these specs. Which include additional
and enhanced functions. A fossil driver that conformed strictly,
and only to these FTSC specs will not work with Juggernaut.
FTS-0009 001 ^aMSGID: / ^aREPLY: Complete(d) Support
The oddball double-quotes stuff isn't supported. Instead I assume
the first "word" (text delinated by spaces) is the address.
FSC-0056 001 EMSI/IEMSI Protocol Definitions Complete(d) Support
IEMSI, EMSI_HBT, EMSI_CLI are not supported. The EMSI_addon fields
are ignored (which includes IDENT for nodelist info and TRX for
transaction number). Link codes are ignored, 8N1 is assumed.
Calling system options are ignored, PUA is assumed. Answering
system options are ignored, we send everything and ignore their
restrictions. Compatibility codes: only ZMO protocol supported
(rest may be in the future), ARC, XMA, and FNC are assumed, rest are
ignored.
FSC-0025 001 AVATAR Complete(d) Support
The stuff about the user being able to type a function key, and then
having that scan code sent out, and the BBS using it as a valid
function key (albiet for external-to-the-program functions) is not
supported at either the BBS end nor by my internal terminal program.
FTS-0004 001 EchoMail Specification Complete(d) Support
Tear ("---") and Path ("^aPATH:") lines are not supported. Seen-by
(SEEN-BY:") lines are also ignored with the exception of when we are
the BBS that actually creates the message. Then a seen-by line is
added just below the MSGID line (at the top of the message) and the
zone:net/node address is put in. This is done to stop non-
Juggernaut EchoMail processors from re-sending it back to us.
Juggernaut relies on proper EchoMail topography rather than lots of
seen-by's.
APPENDIX M
QWK stuff QWK mail uses QMail format (not MarkMail). It compresses
using ZIP (not LHA or ARJ).
Notes on compatibility with various off-line readers:
SLMR105 SLMR 1.05 Greg Hewgill
──bad wordwrapping of text
BABL23BA BABBLE v1.0ß23 Marcos Della/Shad Muegge
──bad wordwrapping of text
MREADR JABBER 1.1 Marcos Della/Shad Muegge
──buggy (unusable)
OFFLI142 OFFLINE 1.42 Harvey Parisien
──bad wordwrapping of quoted text
BWAVE210 Blue Wave 2.10 George Hatchew
──bad wordwrapping of quoted text
Best to use with JDR_BBS from the above:
for occasional use: OFFLINE
for heavy use: Blue Wave
For a off-line mail reader to be JDR_BBS friendly it must:
Word wrap long message lines.
Word wrap long quoted message lines (maintaining ">"'s on
the new lines).
Properly display ANSI's with multiple "pages" (pause before
each "[2J").
Handle message area title names up to a reasonable length.
Name-case TO: and FROM: names.
If it want's to be really friendly:
Properly convert "}x" and "]x[" color codes.
APPENDIX N
Copyrights Name Author
────────────────────── ─────────────────────────
LIST and SORTF Vernon Buerg
DSZ and GSZ Chuck Forsberg
LHA Harayoshu Yoshizaki
PKZIP, PKUNZIP, ZIP,
and PKLITE Phil Katz
X00 Raymond L. Gwinn
BASIC PDS, QUICKBASIC,
VISUAL BASIC, WINDOWS,
and MS-DOS Microsoft
NORTON UTILITIES Peter Norton
BIMODEM Erik Labs
THE DRAW TheSoft
ARJ Robert K Jung
COMPUSHOW Bob Berry
PC-WRITE Quicksoft
DESQVIEW Quarterdeck
and others to be noted eventually.